let firstMenu = null // 第一个菜单

//* 编写路由与组件的映射关系（自动读取 @/router/mian 下面的所有 js文件，整理成路由数组，在登录时进行注册）
export function mapMenusToRoutes(userMenus) {
  const routes = []

  //TODO 1. 先加载默认所有的 routes
  const allRoutes = []
  // require 是webpack的对象，context是方法，表示递归(第二个参数：true，表示开启递归)获取 /router/main 目录下的所有 .ts 文件路径（相对于main目录）
  const routeFiles = require.context('@/router/main', true, /\.js/)
  // routeFiles.keys() 可以得到所有的 .js 文件路径数组
  routeFiles.keys().forEach((key) => {
    // 获取每一个文件路径，例如：@/router/main/admin/User/admin.js
    const route = require(`@/router/main${key.split('.')[1]}.js`) // 相当于：require(../router/main/analysis/dashboard/dashboard)
    allRoutes.push(route.default)
  })
  //TODO 2. 根据菜单获取需要添加的 routes
  // 递归函数
  const _recurseGetRoute = (menus) => {
    for (const menu of menus) {
      if (menu.type === 2) {
        const route = allRoutes.find((route) => route.path === menu.path)
        if (route) routes.push(route)
        // 先保存第一个菜单（一开始没有值，所以会赋值第一个子菜单，后面有值就不会被赋值了）
        if (!firstMenu) firstMenu = menu
      } else {
        _recurseGetRoute(menu.children)
      }
    }
  }
  // 调用
  _recurseGetRoute(userMenus)

  return routes
}

//* 处理面包屑
export function pathMapBreadcrumbs(userMenus, currentPath) {
  const breadcrumbs = []
  pathMapToMenu(userMenus, currentPath, breadcrumbs)
  // console.log(breadcrumbs)
  return breadcrumbs
}

//* 根据路径匹配对应的 menus
export function pathMapToMenu(userMenus, currentPath, breadcrumbs) {
  // console.log(userMenus, currentPath);
  for (const menu of userMenus) {
    if (menu.type === 1) {
      const findMenu = pathMapToMenu(menu.children ?? [], currentPath)
      if (findMenu) {
        breadcrumbs?.push({ name: menu.name })
        breadcrumbs?.push({ name: findMenu.name })
        return findMenu
      }
    } else if (menu.type === 2 && menu.path === currentPath) {
      breadcrumbs?.push({ name: menu.name })
      return menu
    }
  }
}


export { firstMenu }

